﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using System.Linq;

namespace QuanLyKTX
{
    using DAL;
    using Telerik.WinControls.UI;
    public partial class frm_EWBills : Telerik.WinControls.UI.RadForm
    {
        #region Private Methods

        private void DefaultLoadForm()
        {
            // Khởi tạo Kỳ tháng
            for (int i=1; i <= 12; i++)
            {
                RadListDataItem dataItem = new RadListDataItem();
                dataItem.Value = i;
                dataItem.Text = i.ToString();

                radDropDownList_KyThang.Items.Add(dataItem);
            }
            radDropDownList_KyThang.Items[0].Selected = true;

            // Khởi tạo Năm
            radMaskedEditBox_Nam.Value = DateTime.Now.Year;

            // Khởi tạo đơn giá điện
            using (var db = new QuanLyKTXDataContext())
            {
                var result = (from p in db.tbl_CauHinhApDungPhis
                              where p.KichHoat == true
                              select p).FirstOrDefault();

                if (result != null)
                {
                    radMaskedEditBox_DonGiaDien.Value = result.DonGiaDien;
                    radMaskedEditBox_DonGiaNuoc.Value = result.DonGiaNuoc;
                }
            }

            radMaskedEditBox_PhuThu.Value = 20;
            //radMaskedEditBox_PhuThu.Text = String.Empty;
            radGridView_HoaDon.AutoGenerateColumns = false;

            radDropDownList_KyThang.Focus();
        }

        private void InsHoaDonDienNuoc(byte kyThang, string nam, decimal donGiaDien, decimal donGiaNuoc, string ghiChu, int phuThu)
        {
            using (var db = new QuanLyKTXDataContext())
            {
                var phongs = (from p in db.tbl_XepPhongs
                              select new
                              {
                                  p.SoPhong
                              }).Distinct();

                foreach (var phong in phongs)
                {

                    // Kiểm tra đã có hóa đơn hay chưa

                    var checkHoaDon = from p in db.tbl_HoaDonDienNuocs
                                      where p.SoPhong == phong.SoPhong && p.KyThang == kyThang && p.Nam == nam
                                      select p;

                    if (checkHoaDon.Count() == 0)//Nếu chưa
                    {
                        var rCuoi = (from p in db.tbl_ChiSoDienNuocs
                                     where p.KyThang == kyThang && p.Nam == nam && p.SoPhong == phong.SoPhong && p.Loai == 1
                                     select p).FirstOrDefault();

                        var rBDau = (from p in db.tbl_ChiSoDienNuocs
                                     where p.KyThang == kyThang && p.Nam == nam && p.SoPhong == phong.SoPhong && p.Loai == 0
                                     select p).FirstOrDefault();

                        var rTruoc = (from p in db.tbl_ChiSoDienNuocs
                                      where p.KyThang == (kyThang - 1 == 0 ? 12 : kyThang - 1) && p.Nam == (kyThang - 1 == 0 ? (Convert.ToInt32(nam) - 1).ToString() : nam) && p.SoPhong == phong.SoPhong && p.Loai == 1
                                      select p).FirstOrDefault();

                        if (rCuoi != null)
                        {
                            if (rBDau != null) // Nếu có chỉ số ban đầu
                            {
                                tbl_HoaDonDienNuoc hoaDonDienNuoc = new tbl_HoaDonDienNuoc
                                {
                                    MaHoaDon = Guid.NewGuid(),
                                    SoPhong = phong.SoPhong,
                                    TuNgay = rBDau.NgayGhi,
                                    DenNgay = rCuoi.NgayGhi,
                                    KyThang = kyThang,
                                    Nam = nam,
                                    CSDienDau = rBDau.ChiSoDien.ToString(),
                                    CSDienCuoi = rCuoi.ChiSoDien.ToString(),
                                    CSNuocDau = rBDau.ChiSoNuoc.ToString(),
                                    CSNuocCuoi = rCuoi.ChiSoNuoc.ToString(),
                                    DonGiaDien = donGiaDien,
                                    DonGiaNuoc = donGiaNuoc,
                                    GhiChu = ghiChu,
                                    NgayXuat = DateTime.Now
                                };

                                db.tbl_HoaDonDienNuocs.InsertOnSubmit(hoaDonDienNuoc);
                                db.SubmitChanges();
                                BindGridViewHoaDon(kyThang, nam);
                            }
                            else
                            {
                                if (rTruoc != null) // Không có, lấy chỉ số tháng của kỳ trước
                                {
                                    tbl_HoaDonDienNuoc hoaDonDienNuoc = new tbl_HoaDonDienNuoc
                                    {
                                        MaHoaDon = Guid.NewGuid(),
                                        SoPhong = phong.SoPhong,
                                        TuNgay = rTruoc.NgayGhi,
                                        DenNgay = rCuoi.NgayGhi,
                                        KyThang = kyThang,
                                        Nam = nam,
                                        CSDienDau = rTruoc.ChiSoDien.ToString(),
                                        CSDienCuoi = rCuoi.ChiSoDien.ToString(),
                                        CSNuocDau = rTruoc.ChiSoNuoc.ToString(),
                                        CSNuocCuoi = rCuoi.ChiSoNuoc.ToString(),
                                        DonGiaDien = donGiaDien,
                                        DonGiaNuoc = donGiaNuoc,
                                        GhiChu = ghiChu,
                                        NgayXuat = DateTime.Now
                                    };

                                    db.tbl_HoaDonDienNuocs.InsertOnSubmit(hoaDonDienNuoc);
                                    db.SubmitChanges();
                                    BindGridViewHoaDon(kyThang, nam);
                                }
                                else
                                {
                                    MessageBox.Show("KHông tìm thấy chỉ số bắt đầu hoặc chỉ số tháng trong kỳ");
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("Chưa có chỉ số được đánh dấu là chỉ số tháng trong kỳ");
                        }
                    }
                }
            }
        }

        private void BindGridViewHoaDon(byte kyThang, string nam)
        {
            using (var db = new QuanLyKTXDataContext())
            {
                var results = from p in db.tbl_HoaDonDienNuocs
                              where p.KyThang == kyThang && p.Nam == nam
                              orderby p.SoPhong
                              select p;

                if (results != null)
                    radGridView_HoaDon.DataSource = results;
                else radGridView_HoaDon.DataSource = null;
            }
        }

        #endregion

        #region Event Methods
        public frm_EWBills()
        {
            InitializeComponent();
        }

        private void frm_EWBills_Load(object sender, EventArgs e)
        {
            DefaultLoadForm();
        }

        private void radButton_Thoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void radDropDownList_KyThang_Enter(object sender, EventArgs e)
        {
            ((Telerik.WinControls.UI.RadDropDownListEditableAreaElement)(this.radDropDownList_KyThang.GetChildAt(0).GetChildAt(0))).BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(253)))), ((int)(((byte)(215)))));
        }

        private void radDropDownList_KyThang_Leave(object sender, EventArgs e)
        {
            ((Telerik.WinControls.UI.RadDropDownListEditableAreaElement)(this.radDropDownList_KyThang.GetChildAt(0).GetChildAt(0))).BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(255)))), ((int)(((byte)(255)))));
        }

        private void radButton_XuatHoaDon_Click(object sender, EventArgs e)
        {
            byte kyThang = Convert.ToByte(radDropDownList_KyThang.SelectedValue);
            string nam = radMaskedEditBox_Nam.Value.ToString();

            decimal donGiaDien = Convert.ToDecimal(radMaskedEditBox_DonGiaDien.Value.ToString());
            decimal donGiaNuoc = Convert.ToDecimal(radMaskedEditBox_DonGiaNuoc.Value.ToString());
            int phuthu = Convert.ToInt32(radMaskedEditBox_PhuThu.Value.ToString());
            string ghiChu = radTextBox_GhiChu.Text;

            if (nam != string.Empty)
            {
                InsHoaDonDienNuoc(kyThang, nam, donGiaDien, donGiaNuoc, ghiChu, phuthu);
            }
            else
            {
                MessageBox.Show("Cần nhập năm của kỳ tháng thứ " + kyThang.ToString());
            }
        }
        #endregion
    }
}
